<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Object.defineproperty</title>
</head>
<body>
    
</body>
<script>
    let number = 18;
    let person = {
        name: "XCZJust",
        sex: "man"
    };
    
    Object.defineProperty(person, "age", {
        value: 22,
        //通过defineproperty创建的属性若没有声明enumerable则不可被枚举
        enumerable: true,
        //writable定义属性是否可被修改
        writable: true,
        //configurable控制属性是否可被删除
        configurable: true
    });

    //此行为将互不关联的两个变量相关
    Object.defineProperty(person, "temp", {
        //get:function()
        //当有人要读取temp属性值是，会自动调用get函数（getter），且返回temp属性的值    //可以去控制台查看
        get(){
            return number;
        },

        //当有人要修改temp属性值是，会自动调用set函数（setter）   //可以去控制台查看
        //当你修改temp值是，number也会被改变
        set(value){
            console.log(value)
            number = value;            
        }
    })
    console.log(person);
    console.log(Object.keys(person));
</script>
</html>